package com.etoak.config;

import com.etoak.properties.ImageProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;

@Configuration // 标注这个类为配置类，Spring会扫描并使用这个类中的配置
public class WebFluxConfig implements WebFluxConfigurer { // 定义了一个类WebFluxConfig，它实现了WebFluxConfigurer接口

    @Autowired // 自动注入ImageProperties类
    private ImageProperties imageProperties;

    @Override // 重写WebFluxConfigurer接口的addResourceHandlers方法
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 获取图片服务的前缀，并检查是否以"/"结尾
        String mapping = imageProperties.getPrefix().endsWith("/") ?
                imageProperties.getPrefix() + "**" : // 如果以"/"结尾，则添加"**"以匹配所有子路径
                imageProperties.getPrefix() + "/**"; // 如果不以"/"结尾，则添加"/**"以匹配当前路径及其子路径

        // 获取图片存储的位置，并检查是否以"/"结尾
        String location = imageProperties.getLocation().endsWith("/") ?
                "file:" + imageProperties.getLocation() : // 如果以"/"结尾，则直接添加"file:"前缀
                "file:" + imageProperties.getLocation() + "/"; // 如果不以"/"结尾，则添加"/"以匹配当前目录

        // 添加资源处理器，用于处理匹配到的资源请求
        registry.addResourceHandler(mapping) //向资源处理器注册新的处理器，并使用之前构造的路径模式（mapping）
                .addResourceLocations(location); // 将资源映射到指定的文件路径
    }
}
